/**
 *@file GPart3D.H
 *@brief Graphical articulated part: render articulated part
 */
#ifndef OOPSMP_GRAPHICS_GUTILS_GGEOMETRY_GWORKSPACE_GARTICULATEDPART3D_H_
#define OOPSMP_GRAPHICS_GUTILS_GGEOMETRY_GWORKSPACE_GARTICULATEDPART3D_H_

#include "OOPSMP/Utils/Geometry/Workspace/ArticulatedPart3D.H"
#include "OOPSMP/Graphics/GUtils/GGeometry/GWorkspace/GPart.H"

namespace OOPSMP
{
	/**
	*@brief Macro for class, class pointer, and const class pointer declarations
	*/  
	ForwardClassDeclaration(GArticulatedPart3D);

	/**
	*@brief Graphical part: render part
	*/  
	class GArticulatedPart3D : public GPart
	{
	public:
		/**
		*@brief Initialize data elements to appropriate default values
		*/
		GArticulatedPart3D(void) : GPart()
		{
		}

		/**
		*@brief Free the memory allocated to different data elements
		*/
		virtual ~GArticulatedPart3D(void)
		{
		}

	protected:
	
		/**
		*@brief Auxiliary function for drawing 3D part geometry 
		*@param gRenderer graphical renderer
		*@param part workspace part
		*/ 
		void drawPartGeometry(GRenderer_t gRenderer, Part_const_t part);

		/**
		 *@brief Draw selected part from articulated part
		 *@param gRenderer graphical renderer
		 *@param part workspace part
		 */ 
		void drawPartGeometryHelper(GRenderer_t gRenderer, Part_const_t part);
	}; 
}

#endif